一貫性レベル consistency level
なんかめっちゃ種類あるな...
個別のデータに対するreadとwriteに注目する
≠ readとwriteがグループ化された状態(トランザクション単位)
すべてのwriteは順序を持つ
どのスレッドが書き込んだか、どのオブジェクトに書き込んだかに関わらず
すべてのスレッドはその順序で書き込みが行われたかのように見える
W:x=1W:y=1のような順序で書き込まれたのであれば、y=1を見たあとにx=1ではないxの以前の値が見えてはいけない
現実にx->yの順で書き込まれているかは関係ない
すべてのスレッドから"そう見えている"のであれば現実と違っていても良い
現実の時間でwriteが反映される
readも現実の時間で最新のデータが読み込まれる
システム全体で正確な現在時刻に合意する必要がある
時間が重なったオペレーションに関しては順序づけの制約がない
強い一貫性
データが一つしかないように見える
レプリケーションがないように見える
弱い一貫性
データのコピーが存在しているように見える
ユーザーがページを読み込みなおしたしたとき更新が必ず反映されている
自分のプロフィールならば自分しか更新しないのでリーダーから読み取る
更新したことを覚えておき更新して数分以内ならばリーダーから読み取る
中央 or クライアント
「自分」がクロスデバイスにまたがる可能性がある
ブラウザで更新した後アプリで見る
クライアントにタイムスタンプをもてない
違うレプリカにルーティングされるかもしれない
複数のレプリカが存在するとき読みこむレプリカによって時間がまき戻ったように見える
これを防ぐような読み込み型
常に特定のレプリカにルーティングすればよい
そのレプリカがおちていたら?
一貫性のあるプレフィックス読み取りが保証するのは、ある順序で一連の書き込みが行われた場合、それらの書き込みを読み取る者には必ず書き込まれた際と同じ順序でそ れらが見える、ということです。
シャーディングで問題になる
全体の書き込みに順序がつけられていない